export function debounce(fn, wait, immediate=false){
    let timer
    return function() {
        const ctx = this
        const args = arguments
        if (timer){
            clearTimeout(timer)
        }
        if (immediate){
            const callNow = !timer
            timer=setTimeout(() => {
                timer=null
            }, wait);
            if(callNow){
                fn.apply(ctx,args)
            }
        }else {
            timer=setTimeout(() => {
                fn.apply(ctx,args)
            }, wait);
        }
    }        
}


export function throttle(fn, wait) {
  let sign = true;
  return function() {
    const ctx = this
    const args = arguments
    // 在函数开头判断标志是否为 true，不为 true 则中断函数
    if (!sign) return;
    //  sign 设置为 false，防止执行之前再被执行
    sign = false;
    setTimeout(() => {
      fn.apply(ctx,args)
      // 执行完事件之后，重新将这个标志设置为 true
      sign = true;
    }, wait)
  }
}

export function validateEmail(email) {
    var emailRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/;
    return emailRegex.test(email);
}
// 导出全部数据的excel
export function exportExcel(tableData,dropCol,filename='报表') {
    let arr1=[]
    let arr2=[]
    let filterValArr=[]
    dropCol.forEach(item=>{
        if(!!item.childNodes){
        arr1.push("" + item.label)
        item.childNodes.forEach((el,k)=>{
            arr2.push("" + el.label)
            filterValArr.push("" + el.prop)
            if(k!=0){
            arr1.push("" )
            }
        })
        }else{
        arr1.push("" + item.label)
        arr2.push("" )
        filterValArr.push("" + item.prop)
        }
    })
    let mergesArr =[]
    let HeaderArr=[]
    let type=false
    dropCol.forEach((item,k)=>{
      let numBefore=0
      for(var i=0;i<k;i++){
        numBefore+=!!dropCol[i].childNodes?dropCol[i].childNodes.length:1
      }
      let num=!!item.childNodes?item.childNodes.length:1
        let obj={}
      if(!item.childNodes){
        obj={s: {r: 0, c: numBefore}, e: {r: 1, c: numBefore}}
      }else{
        type=true
        obj={s: {r: 0, c: numBefore}, e: {r: 0, c: numBefore+num-1}}
      }
      mergesArr.push(obj)
    })
    if(type){
      HeaderArr=[arr2,arr1]
    }else{
      HeaderArr=[arr1]
      mergesArr=[]
    }
    let sourceOriginAmount = tableData;
    import("@/utils/vendor/Export2Excel1.js").then((excel) => {
        // 导入js模块
        const tHeader = HeaderArr; //表头
        const filterVal = filterValArr; //每个标题对应的字段
        console.log(tHeader,filterVal)
        const list = (sourceOriginAmount || []).map((item, key) => {
        // 通过 map 方法遍历，组装数据成上面的格式

        let obj1 = {};
        filterVal.forEach((el) => {
            obj1[el] = item[el];
        });
        return obj1;
        });

        if (list) {
        const data = list.map((v) => filterVal.map((j) => v[j]));; // 生成json数据
        console.log(data,filterVal, list)
        excel.export_json_to_excel({
            // 调用excel方法生成表格
            header: tHeader,
            data,
            filename: filename,
            merges:mergesArr
        });
        } else {
            this.$message.warning(this.$t('common.noData'));
        }
    });
}
//num:计算前数值 
// type:取值方式 fixed:截取方式  ceil:向上取值方式  floor:向下取值方式  round:四舍五入取值方式
// decimal:小数点
export function computing(num,type,decimal=0){
  let nums=0
  let DoublingNum=1
  for (var i=1;i<=decimal;i++){
    DoublingNum=DoublingNum*10
  }
  if(type=='fixed'){
    nums=num.toFixed(decimal)
  }else if(type=='ceil'){
    nums=Math.ceil(num * DoublingNum) / DoublingNum;
  }else if(type=='floor'){
    nums=Math.floor(num * DoublingNum) / DoublingNum;
  }else if(type=='round'){
    nums=Math.round(num * DoublingNum) / DoublingNum;
  }
  //判断是否为NaN
  if(Number.isNaN(Number(nums))){
    nums=0
  }
  return Number(nums)
}